package model.archivo;

import java.io.FileNotFoundException;
import java.io.IOException;


public class ArchivoBloques extends Archivo {
	
	private int aTamanioBloque;

	//El tamanio de bloque debe ser > 0.
	public ArchivoBloques(String xRutaArchivo, int xTamanioBloque) throws FileNotFoundException, IOException {
		super(xRutaArchivo);
				
		aTamanioBloque=xTamanioBloque;		
	}
	
	public ArchivoBloques(String xRutaArchivo, int xTamanioBloque, boolean eraseFile) throws FileNotFoundException, IOException {
		super(xRutaArchivo, eraseFile);
				
		aTamanioBloque=xTamanioBloque;		
	}

	//El numero del bloque a escribir debe ser >= 0.
	//El tamanio del bloque a escribir debe ser igual al tamanio del bloque del archivo.
	public void EscribirBloque(byte[] xBloqueEscribir, int xNumeroBloqueAEscribir) throws IOException{		
		aArchivo.seek(xNumeroBloqueAEscribir*aTamanioBloque);
		aArchivo.write(xBloqueEscribir);
		
		if(aArchivo.length()%aTamanioBloque!=0){
			aArchivo.setLength((GetCantidadBloques()+1)*aTamanioBloque);
		}
	}

	//El numero del bloque a leer debe ser >= 0.
	//El numero del bloque a leer no puede ser mayor al numero del ultimo bloque del archivo.
	//El tamanio del bloque a leer debe ser igual al tamanio del bloque del archivo.
	public void LeerBloque(byte[] xBloqueALeer, int xNumeroBloqueALeer) throws IOException{		
		aArchivo.seek(xNumeroBloqueALeer*aTamanioBloque);
		aArchivo.read(xBloqueALeer);		
	}
	
	public long GetCantidadBloques() throws IOException{
		return aArchivo.length()/aTamanioBloque;
	}

	public int GetTamanioBloque() {
		return aTamanioBloque;
	}

}
